<?php
namespace kongzhiqi;

/**
 * 公共控制器程序
 * 把公共的方法都放这来
 */
class Gonggong
{
    // 检查权限
    //             检查的原理是判断header传来的票据piaoju是否在数据表denglu里面，不在就是没登录；
    //             在的话就是登录了，这时继续查询（后阶段可以用关联查询一次性查）用户信息并存到session
    //             暂时不考虑用session存储票据，全依赖数据库。优化阶段再考虑做。
    public function jiancha() {
        $piaoju = $_COOKIE['piaoju'];
        if (!$piaoju) {
            chucuo('没票别上车，请出示你的票。');
        } else { // 检查票据合法性
            // TODO 这里要实现过期时间验证
            // TODO 这里可以请同学们想办法实现一次查询就能验证票据和获取用户信息（关联查询）
            $mysql = $GLOBALS['mysql'] ;
            $sql = "
                select piaoju,zhanghao from ke_piaoju where piaoju = '$piaoju'
            ";
            $jg = $mysql->doSql($sql);
            if (!$jg) { // 不合法（票据找不到或过期了）
                chucuo('你的是假票吧？还是过期了？重新买一张吧');
            } else {
                // 查找并记录用户信息到“全局变量”session中
                $zhanghao = $jg[0]['zhanghao'];
                $sql = "
                    select * from ke_yonghu where zhanghao='$zhanghao'
                ";
                $yonghu = $mysql->doSql($sql);
                if($yonghu){
                    $_SESSION['yh_zh'] = $yonghu[0]['zhanghao'];
                    $_SESSION['yh_id'] = $yonghu[0]['id'];
                }
                
            }
        }
    }

    // 登录  
    //         提交用户名和密码，匹配就生成一个票据piaoju，并在数据表denglu中记录对应的账号（后期优化再考虑过期的问题）
    //                               后期就可以根据账号再查询到用户
    //         调用方式 /api.php?y=index/denglu&zhanghao=zhangshan&mima=1111 
    public function denglu() {
        $mysql = $GLOBALS['mysql'] ;
        $zhanghao = $_REQUEST['zhanghao'];
        $mima = $_REQUEST['mima'];
        $sql = "
            select * from ke_yonghu where zhanghao='$zhanghao' and mima='$mima'
        ";
        $jg = $mysql->doSql($sql);
        // tiaoshi($jg);
        if (!$jg) {
            chucuo("登录失败，账号或密码错误！");
        }else{
            // 这里有多种处理方式，一种是不处理，直接创建新的票据；二是删除所有旧的同账号票据；三是有同账号票据就只更新票据；请同学们思考如何实现。
            $piaoju = uniqid(mt_rand(), true);
            // 删除同一账号下的票据，避免多地登录
            $sql_shanchu = "
                delete from ke_piaoju where zhanghao = '$zhanghao'
            ";
            $mysql->doSql($sql_shanchu);
            // 保存票据到数据库
            $sql = "
                insert into ke_piaoju (piaoju,zhanghao) values ('$piaoju','$zhanghao')
            ";
            $jg = $mysql->doSql($sql);
            if ($jg) {
                setcookie('piaoju',$piaoju); // cookies返回
                fanhui('登录成功',['piaoju'=>$piaoju]);
            } else {
                chucuo("数据库写入票据失败！");
            }
        }
    }

    // 控制器构造函数
    public function __construct(){
        
        // tiaoshi("Gonggong __construct ");
        
    }

    // 控制器解构函数
    public function __destruct(){
        
        // tiaoshi("Gonggong __destruct ");
        
    }

}

